#include "BlackDeath.Core.h"

namespace BlackDeath
{
	namespace Graphics
	{
		class CGraphicsDevice;
	}

	/*TODO:
		namespace Content
	*/
	namespace Core
	{	
		class CGameWindow;
		class CGameComponentManager;
		class CGameComponent;
		class CGameTime;

		/*TODO
			class CServiceManager
		*/

		class CGame
		{
			private:
			#pragma region Variables
				CGameWindow* m_pGameWindow;
				BlackDeath::Core::CGameTime* m_pTimer;
				BlackDeath::Graphics::CGraphicsDevice* m_pGraphicsDevice;				
				BlackDeath::Core::CGameComponentManager* m_pComponentManager;
				/*TODO
				CServiceManager
				CContentManager
				*/
			#pragma endregion
			
			public:
			#pragma region Constructor and Destructor
				CGame();
				virtual ~CGame();
			#pragma endregion

			#pragma region Options
				void Run();
				void Exit();
			#pragma endregion

			#pragma region Properties
				BlackDeath::Graphics::CGraphicsDevice* Get_GraphicsDevice();
				
				BlackDeath::Core::CGameComponentManager* Get_Components();
				/*TODO:
				Get_Services
				Get_Content
				*/
				BlackDeath::Core::CGameWindow* Get_Window();
			#pragma endregion

			protected:
			#pragma region Methods
				virtual void Initialize();
				virtual void LoadContent();
				virtual bool BeginDraw();
				virtual void Draw(BlackDeath::Core::CGameTime*);
				virtual void EndDraw();
				virtual void Update(BlackDeath::Core::CGameTime*);
				virtual void BeginRun();
				virtual void EndRun();
			#pragma endregion
		};
	}
}